home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2000 July / CD 3 / redhat-6.2.iso / RedHat / instimage / usr / lib / anaconda / raid.py~ < prev    next >
Encoding:
Text File  |  2000-03-08  |  1.5 KB  |  66 lines

  1. #!/usr/bin/python
  2.  
  3. import _balkan
  4. import isys
  5. import os
  6.  
  7. def scanForRaid(drives):
  8.     for d in drives:
  9.     isys.makeDevInode(d, "/tmp/" + d)
  10.     try:
  11.         parts = _balkan.readTable('/tmp/' + d)
  12.     except SystemError, msg:
  13.         parts = []
  14.  
  15.     os.remove("/tmp/" + d)
  16.     raidSets = {}
  17.     raidDevices = {}
  18.     for i in range(0, len(parts) - 1):
  19.         (type, start, size) = parts[i]
  20.         if type != 7: continue
  21.  
  22.         dev = "%s%d" % (d, i + 1)
  23.  
  24.         (major, minor, raidSet, level, nrDisks, totalDisks, mdMinor) = \
  25.             isys.raidsb(dev)
  26.  
  27.         if raidSets.has_key(raidSet):
  28.             (knownLevel, knownDisks, knownMinor, knownDevices) = \
  29.             raidSets[raidSet]
  30.         if knownLevel != level or knownDisks != totalDisks or \
  31.            knownMinor != mdMinor:
  32.                # Raise hell
  33.                pass
  34.         knownDevices.append(dev)
  35.         else:
  36.         raidSets[raidSet] = (level, totalDisks, mdMinor, [dev,])
  37.  
  38.         if raidDevices.has_key(mdMinor):
  39.             if (raidDevices[mdMinor] != raidSet):
  40.             # Raise hell
  41.             pass
  42.         else:
  43.             raidDevices[mdMinor] = raidSet
  44.  
  45.     raidList = []
  46.     for key in raidSets.keys():
  47.         (level, totalDisks, mdMinor, devices) = raidSets[key]
  48.         if len(devices) != totalDisks:
  49.             # raise hell
  50.         pass
  51.         raidList.append((mdMinor, devices))
  52.  
  53.     return raidList
  54.         
  55. def startAllRaid(driveList):
  56.     mdList = []
  57.     for (mdDevice, deviceList) in scanForRaid(driveList):
  58.         devName = "md%d" % (mdDevice,)
  59.     isys.raidstart(devName, deviceList[0])
  60.     mdList.append(devName)
  61.     return mdList
  62.  
  63. def stopAllRaid(mdList):
  64.     for dev in mdList:
  65.     isys.raidstop(dev)
  66.